 
/* 
 * Copyright (C) Ignacio Lucas
 */
 
/*
 *  common_objects_pool, hecho por Ignacio Lucas
 *
 *  Vector de objetos object_pool con los objetos más utilizados en la aplicación.
 *  Los objetos más comunes son: sockets, job, stack (espacio de memoria donde ejecuta la corrutina), objeto http_request,
 *  objeto http-response, objeto incremental_buffer, objeto socket, objeto hashmap y objeto hashmap_entry.
 *  Ignacio Lucas <ignacio.lucas@gmail.com>
 *
 */
#if !defined(COMMON_OBJECTS_POOL_H)
#define COMMON_OBJECTS_POOL_H

#include "common.h"
#include "utils/object_pool.h"

#define MAX_POOLS 24
#define BASE_USER_POOLS	6
#define MAX_USER_POOLS MAX_POOLS - BASE_USER_POOLS

// para acceso a los distintos pool de objetos de memoria prealocada.
#define SOCKET_POOL 						0
#define JOB_POOL 							1
#define QUEUE_POOL		 					2	// sin acceso sincronizado.
#define TIMER_SERVICE_POOL 					3	// sin acceso sincronizado.
#define HASHMAP_POOL		 				4
#define HASHMAP_HASHENTRY_POOL				5


// indica la cantidad total de pools de objetos.
int common_objects_pool_get_pool_count();

// inicialización del vector de object_pool.
int common_objects_pool_init(int pool_count, object_pool_conf *conf);

// devolver un objeto al pool.
int common_objects_pool_put(int pool_type, void *p);

// pedir un objeto del pool.
void* common_objects_pool_get(int pool_type);

// destruir todos los pools de objetos.
int common_objects_pool_destroy();

#define MASHUP_SERVER_SYSTEM_POOL_GET common_objects_pool_get
#define MASHUP_SERVER_SYSTEM_POOL_PUT common_objects_pool_put

#define MASHUP_SERVER_USER_POOL_GET common_objects_pool_get
#define MASHUP_SERVER_USER_POOL_PUT common_objects_pool_put

#endif
